Agent 记忆
同一个用户,上周说过"我对花生过敏",这周问"推荐个川菜馆"。会话结束时 messages 数组被丢掉,下一次请求里没有任何关于花生的字节 —— 模型不是忘了,是根本没收到。
记忆层就是补上这一段:从已经结束的会话里挑出值得留下的东西,存到会话之外,在下一次需要时放回上下文。本专题拆解这件事的四个动作 —— 挑什么、怎么存、怎么改、怎么取回 —— 以及它们各自会怎么坏。
先约定几个词,本专题全程使用:
| 词 | 意思 |
|---|---|
| 上下文(context) | 这一次请求真正发给模型的那串 token。它是易失的,请求结束就没了 |
| 记忆(memory) | 存在上下文之外、能跨会话活下来的东西。记忆本身不产生效果,只有被读回上下文才有效果 |
| 抽取(extraction) | 用一次额外的模型调用,从对话里挑出"值得记住的事实"。绝大多数记忆库的写入路径第一步 |
| 情景 / 语义 / 程序记忆 | 记忆的三种分型:发生过什么、事实是什么、该怎么做。01 篇细讲 |
| 巩固(consolidation) | 新事实进来时,跟已有记忆比对、合并、改写或作废的过程。冲突消解发生在这里 |
| 双时间轴(bi-temporal) | 同时记录"事实在现实中何时成立"和"系统何时知道这件事"两条时间线。03 篇细讲 |
| 热路径 / 后台 | 记忆写入的两种时机:在用户等回复的这一轮里写(热路径),还是回复完再异步写(后台) |
| 记忆投毒 | 攻击者诱导 Agent 把伪造事实写进记忆,之后每一轮都被读回来。07 篇细讲 |
一、这一层要解决的六个问题
二、七篇正文
| # | 标题 | 覆盖内容 |
|---|---|---|
| 01 | 记忆与上下文的边界 | 四个常被混作一谈的东西、情景 / 语义 / 程序三种分型、Profile 与 Collection 两种存储形态、什么时候不该上记忆层 |
| 02 | 写入路径:什么该被记下来 | 抽取式与原样存两条路线、mem0 从四操作巩固转向纯追加的完整源码、热路径与后台的取舍、UUID 反幻觉映射、写入成本估算 |
| 03 | 冲突、遗忘与时间 | 事实变化的四种形态、硬删除为什么不可行、Graphiti 双时间轴的四个字段、边失效而非删除、遗忘策略与它的代价 |
| 04 | 读取路径:向量、图与结构化 | 纯向量检索的四类失效、Graphiti 三路混合检索与五种重排、召回预算怎么定、注入位置对缓存的影响 |
| 05 | 文件系统式记忆 | Anthropic memory 工具的六个命令与路径穿越防护、Letta 从数据库块转向 git 版本化目录、文件式的边界在哪 |
| 06 | 开源实现横评 | 八个项目的许可证与部署重量实测、两个选型陷阱(Zep 已不是开源服务端、Letta 换了语言换了仓库)、存储依赖对照 |
| 07 | 失败模式、评测与选型 | 记忆投毒与错误固化、跨租户串号、LoCoMo 三方争议始末、MemDelta 的对照实验结论、选型决策树与四步落地 |
只读两篇的话:02 篇(写入路径)和 07 篇(失败模式与评测)。前者决定你能记住什么,后者决定你能不能相信自己记住的东西。
三、三个需要先知道的前提
3.1 这个领域一年换一代,模型记忆里的答案基本都过期
本专题的所有数据实测于 2026-08-25。三个最容易踩的断点:
| 你可能记得的 | 现在的实际情况 |
|---|---|
getzep/zep 是 Zep 的开源服务端 | 该仓库现在只放 Zep Cloud 的示例与集成代码,README 首段明写 "This repository is not Zep's product or service"。开源的部分是 getzep/graphiti |
letta-ai/letta 是 Letta(原 MemGPT)的 Python 服务端 | 该仓库只剩一个落地页,V1 服务端源码退役到 archive 分支且不再修 bug。当前源码在 letta-ai/letta-code,TypeScript 写的,2025-10-25 建仓 |
| mem0 的写入是 ADD / UPDATE / DELETE / NONE 四选一 | 主分支的默认路径已换成纯追加的 ADDITIVE_EXTRACTION_PROMPT,只产生 ADD,用 linked_memory_ids 挂关系。四操作的提示词还在文件里,但不再是默认 |
3.2 记忆没有语义约定,和可观测性不一样
Agent 可观测性那一层至少有 gen_ai.* 和 OpenInference 两套规范可以对齐。记忆层没有对应的东西:每个项目自己定义记忆条目长什么样、有哪些字段、检索接口叫什么。
后果是换实现等于重做数据迁移。mem0 的一条记忆是带 hash 和 metadata 的一段文本,Graphiti 的一条记忆是带四个时间字段的一条图边,两者之间没有无损转换。选型时把"以后换不换得掉"当成一个真实成本,而不是假设有标准兜底。
3.3 榜单数字目前不可比
LoCoMo 是这个领域引用最多的基准。同一个系统在同一个基准上,公开材料里出现过四个分数,最低 58.44%、最高 84% —— 不是实现不同,是评测口径和配置方式不同。完整的争议链条在